package com.chisheng.caa.pojo;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import org.springframework.util.Assert;

import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;

/**
 * 加载策略
 */
public enum LoadingStrategy implements ValueDesc {

    /**
     * 追加模式。若重复则使用重复策略处理。
     *
     * @see DuplicateStrategy
     */
    APPEND(0, "追加模式"),

    /**
     * 覆盖模式。清空原有。
     */
    OVERWRITE(1, "覆盖模式");

    /**
     * 序列化值
     */
    private final Integer value;

    /**
     * 描述信息
     */
    private final String desc;

    LoadingStrategy(Integer value, String desc) {
        this.value = value;
        this.desc = Objects.requireNonNull(desc);
    }

    @JsonValue
    @Override
    public Integer getValue() {
        return value;
    }

    @Override
    public String getDesc() {
        return desc;
    }

    @JsonCreator
    public static LoadingStrategy valueOf(int value) {
        Optional<LoadingStrategy> strategy = Arrays.stream(LoadingStrategy.values())
                .filter(e -> e.value == value)
                .findFirst();

        Assert.isTrue(strategy.isPresent(), String.format("参数 'value' 无效的取值 '%d'", value));
        return strategy.get();
    }

}
